package com.song.tools.mvc.validator;

import java.util.function.Supplier;

/**
 * 最大长度校验器
 *
 * @author song tools
 * @since 2024-06-21
 */
public record MaxLengthValidator(String paramName, Integer maxLength) implements ParamValidator<String> {

    /**
     * 执行参数校验
     *
     * @param paramValueSupplier 参数值supplier
     * @return 校验结果，包含是否通过及失败原因
     */
    @Override
    public ValidationResult validate(Supplier<String> paramValueSupplier) {
        String paramValue = paramValueSupplier.get();
        if (paramValue != null && paramValue.length() > maxLength) {
            return new ValidationResult(false, getDefaultErrorMessage());
        }

        return new ValidationResult(true, null);
    }

    /**
     * 获取默认的错误信息描述。
     * <p>
     * 该方法用于返回一个默认的错误信息描述，当系统发生错误，但没有特定的错误描述时，可以使用这个默认描述。
     * 这对于保持系统的一致性和提供基本的错误反馈是非常有用的。
     *
     * @return 默认的错误信息描述，以字符串形式返回。
     */
    @Override
    public String getDefaultErrorMessage() {
        return paramName + " length must be less than" + maxLength;
    }
}
